package ThreadTest;

import org.junit.Test;

import java.util.concurrent.Callable;
import java.util.concurrent.ExecutionException;
import java.util.concurrent.FutureTask;

/**
 * 创建线程方式三：实现Callable接口
 * Callable较Runnable的优点
 * 1.call（）可以有返回值
 * 2.call（）可以抛出异常，被外边的操作捕获，获取异常信息
 * 3.Callable是支持泛型的
 */
//1.实现Callable接口

class NumThread implements Callable {
    //2.实现call方法
    @Override
    public Object call() throws Exception {
        int sum = 0;
        for (int i = 0; i <= 100; i++) {
            System.out.println(i);
            sum += i;
        }
        return sum;                //自动装箱
    }

}

public class NewThread  {
    @Test
    public void show() {
        //3.创建Callable接口实现类的对象
        NumThread numThread = new NumThread();
        //4.将Callable的实现类的对象作为参数传递到futureTask构造器中，创建futureTask的对象
        FutureTask futureTask = new FutureTask(numThread);
        //5.将futureTask的对象作为参数传递到Thread类的构造器中，创建Tread对象并调用start（）
        new Thread(futureTask).start();

        try {
            Integer sum = (Integer) futureTask.get();
            System.out.println("综合：" + sum);
        } catch (InterruptedException e) {
            e.printStackTrace();
        } catch (ExecutionException e) {
            e.printStackTrace();
        }

    }
}

